Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.1K
Visualizações
"Tipo de parámetro no válido" (numpy.int64) al insertar filas con executemany()

Intento insertar un montón de datos en la base de datos.

 insert_list = [(1,1,1,1,1,1),(2,2,2,2,2,2),(3,3,3,3,3,3),....] #up to 10000 tuples in this list conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=xxxxx;DATABASE=xxxx;UID=xx;PWD=xx;TDS_Version=7.0') cursor = conn.cursor() sql = "insert into ScanEMAxEMAHistoryDay(SecurityNumber, EMA1, EMA2, CrossType, DayCross, IsLocalMinMax) values (?, ?, ?, ?, ?, ?)" cursor.executemany(sql, insert_list)

cursor.executemany(sql, insert_list)

pyodbc.ProgrammingError: ('Tipo de parámetro no válido. param-index=4 param-type=numpy.int64', 'HY105')

reducir a 100 tuplas:

 cursor.executemany(sql, insert_list[:100])

cursor.executemany(sql, insert_list[:100])

pyodbc.ProgrammingError: ('Tipo de parámetro no válido. param-index=4 param-type=numpy.int64', 'HY105') cursor.executemany(sql, insert_list[:100])

reducir a 5 tuplas:

 cursor.executemany(sql, insert_list[:5]) conn.commit()

Esto puede insertar en la base de datos

He intentado:

 sql = 'SET GLOBAL max_allowed_packet=50*1024*1024' cursor.execute(sql)

antes de excutemany() pero tiene un error:

pyodbc.ProgrammingError: ('42000', "[42000] [FreeTDS][SQL Server]'GLOBAL' no es una opción SET reconocida. (195) (SQLExecDirectW)")

¿Cómo resolví esto?

Gracias.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Su problema no es el volumen de datos per se , es que algunas de sus tuplas contienen valores numpy.int64 que no se pueden usar directamente como valores de parámetro para su declaración SQL. Por ejemplo,

 a = numpy.array([10, 11, 12], dtype=numpy.int64) params = (1, 1, a[1], 1, 1, 1) crsr.execute(sql, params)

tirará

ProgrammingError: ('Tipo de parámetro no válido. param-index=2 param-type=numpy.int64', 'HY105')

porque el valor del tercer parámetro es un elemento numpy.int64 de su matriz numpy a . Convertir ese valor con int() evitará el problema:

 a = numpy.array([10, 11, 12], dtype=numpy.int64) params = (1, 1, int(a[1]), 1, 1, 1) crsr.execute(sql, params)

Por cierto, la razón por la que

 sql = 'SET GLOBAL max_allowed_packet=50*1024*1024' cursor.execute(sql)

no funcionó es que max_allowed_packet es una configuración de MySQL que no tiene ningún significado para Microsoft SQL Server.

over 4 years ago · Santiago Trujillo Relatório

0

Hice lo mismo que Robert; Convertí todo a cadena. En mi caso, fue un marco de datos de pandas que lancé al tipo de cadena:

 data = pandas.read_json(...) data.astype(str).to_sql(...)

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.astype.html

Si los datos que está recuperando incluyen direcciones URL, es posible que obtenga un error de "protocolo desconocido" (o algo así). Si obtiene este error incluso después de convertir al tipo de cadena, intente usar StringIO en su lugar :

 import requests from io import StringIO ... data = pandas.read_json(StringIO(response.text))

donde response es una instancia del objeto Response de la biblioteca de requests y su text de atributo contiene los datos de texto json.

over 4 years ago · Santiago Trujillo Relatório

0

Para cualquiera que esté leyendo esto, me estaba volviendo loco.

Mi solución final fue convertir todas las variables a 'str' y funcionó bien.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda